<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
  <script type="text/javascript"> 
  			/*
			 * call()和apply()
			 * 	- 这两个方法都是函数对象的方法，需要通过函数对象来调用
			 * 	- 当对函数调用call()和apply()都会调用函数执行
			 * 	- 在调用call()和apply()可以将一个对象指定为第一个参数
			 * 		此时这个对象将会成为函数执行时的this
			 * 	- call()方法可以将实参在对象之后依次传递
			 * 	- apply()方法需要将实参封装到一个数组中统一传递
			 * 
			 * 	- this的情况：
			 * 		1.以函数形式调用时，this永远都是window
			 * 		2.以方法的形式调用时，this是调用方法的对象
			 * 		3.以构造函数的形式调用时，this是新创建的那个对象
			 * 		4.使用call和apply调用时，this是指定的那个对象
			 */
			function fun(a,b) {
				console.log("a = "+a);
				console.log("b = "+b);
			
      }
      function fun1 () {
        	alert(this);
      }

      var obj1 = {}
			var obj2 = {
				name: "obj",
				sayName:function(){
					alert(this.name);
				}
      };
      
      // fun1()
      // fun1.apply()
      // fun1.call()
      // fun1.apply(obj1)
      // fun1.call(obj1)

      fun.call(obj2,2,3);
      fun.apply(obj2,[2,3]);
      

      var obj3 = {
				name: "obj2"
			};
			
      obj2.sayName.apply(obj3);
      
  </script>
</head>
<body>
  
</body>
</html>